import arrow
from pathlib import Path


def calc_visit_dates(current_followup_date: str, current_followup: int, followup_interval: list) -> list:
    """
    计算随访日期
    :param current_followup_date: 当前随访日期
    :param current_followup: 当前随访周期
    :param followup_interval: 随访间隔周期列表
    :return: 随访日期列表
    """
    visit_dates = []

    # 将随访日期转换为arrow对象
    current_followup_date = arrow.get(current_followup_date)

    # 计算基线时间
    baseline_date = current_followup_date.shift(
        years=-followup_interval[current_followup][0],
        months=-followup_interval[current_followup][1],
        weeks=-followup_interval[current_followup][2],
        days=-followup_interval[current_followup][3])

    # 计算随访日期
    for i in range(0, len(followup_interval)):
        # 计算随访日期（按照月30天,年365天计算）
        followup_date = baseline_date.shift(
            days=followup_interval[i][0]*365 + followup_interval[i][1]*30 + followup_interval[i][2]*7 + followup_interval[i][3])
        
        # 计算随访日期（自然年月日计算）
        # followup_date = baseline_date.shift(
        #     years=followup_interval[i][0],
        #     months=followup_interval[i][1],
        #     weeks=followup_interval[i][2],
        #     days=followup_interval[i][3])

        # 将随访日期添加到列表中
        visit_dates.append(followup_date.format('YYYY-MM-DD'))

    return visit_dates


def filter_earlier_dates(years:int,file_path:str):
    """
    过滤出三年前的日期
    """
    # 结果列表
    result = []

    # 获取当前日期
    current_date = arrow.now()

    # 距离当前时间x年前的日期
    three_years_ago = current_date.shift(years=years)

    # 文件名称
    input_file = file_path

    # 读取文件内容
    with open(input_file, 'r', encoding="utf-8") as f:
        lines = [line.strip() for line in f.readlines()]

    # 过滤出x年前的日期
    for i in lines:
        # 将字符串转换为日期
        time = arrow.get(i)

        # 判断日期是否在x年前
        if time < three_years_ago:
            result.append(i)

    return result

"""计算量表的评估时间

Keyword arguments:
input_file -- 输入文件
output_file -- 输出文件
threshold -- 阈值（超过范围不计算）
Return: return_description
"""


def calculate_evaluation_time(input_file: Path, threshold: int):
    # 读取文件内容
    with open(input_file, 'r', encoding="utf-8") as f:
        lines = [line.strip() for line in f.readlines()]

    # 将字符串转化成数字,并过滤掉大于阈值的数据
    lines = [int(i) for i in lines if int(i) <= threshold]

    # 计算平均值(秒)
    average = sum(lines) / len(lines)

    # 将秒转换为分秒
    minute, second = int(average / 60), int(average % 60)
    
    print(f"评估时间: {average}（秒）")
    print(f"平均评估时间: {minute}分{second}秒")

    

if __name__ == "__main__":
    # followup_date = '2020-07-23'  # 随访日期
    # current_followup = 0  # 当前随访周期
    # followup_interval = [
    #     (0, 0, 0, 0),   # 基线
    #     (0, 0, 4, 0),   # 4周/28天
    #     (0, 3, 0, 0),   # 3个月
    #     (0, 6, 0, 0),   # 6个月
    #     (1, 0, 0, 0),   # 1年
    #     (1, 6, 0, 0),   # 1年6个月  
    #     (2, 0, 0, 0),   # 2年
    #     (2, 6, 0, 0),   # 2年6个月
    #     (3, 0, 0, 0),   # 3年
    #     (3, 6, 0, 0),   # 3年6个月
    #     (4, 0, 0, 0),   # 4年
    #     (4, 6, 0, 0),   # 4年6个月
    #     (5, 0, 0, 0),   # 5年
    #     (5, 6, 0, 0),   # 5年6个月
    #     (6, 0, 0, 0),   # 6年
    #     (6, 6, 0, 0),   # 6年6个月
    #     (7, 0, 0, 0),   # 7年
    #     (7, 6, 0, 0),   # 7年6个月
    #     (8, 0, 0, 0),   # 8年
    #     (8, 6, 0, 0),   # 8年6个月
    #     (9, 0, 0, 0),   # 9年
    #     (9, 6, 0, 0),   # 9年6个月
    #     (10, 0, 0, 0),  # 10年
    # ]  # 随访间隔周期列表

    # result = calc_visit_dates(
    #     followup_date, current_followup, followup_interval)
    
    # for i in range(len(result)):
    #     print(f"访视{i+1}: {result[i]}")


    # # 文件名称
    # input_file = 'input/text.txt'

    # # 获取三年前的日期
    # dates = filter_earlier_dates(years=-3,file_path=input_file)
   # input_file = Path('input') / 'evaluation_time.txt'
   #
   # calculate_evaluation_time(input_file, threshold=120)

    print(arrow.get('19910905'))

    

